#include <iostream>
#include <cstdarg>
#include <cstdio>

// 不定参宏函数

#define LOG(fmt, ...) printf("[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__);

// C风格不定参函数
void myPrintf(const char* format, ...)
{
    va_list ap;
    va_start(ap, format); // 获取指定参数的起始位置，format之后的第一个参数的起始位置
    char* buff;
    int n = vasprintf(&buff, format, ap);
    
    if(n > 0)
    {
        printf(buff);
        free(buff);
    }
    va_end(ap);
}

void myprintf()
{
    std::cout << std::endl;
}
// C++风格
template<class T, class ...Args>
void myprintf(const T& v, Args &&...args)
{
    std::cout << v;
    if(sizeof ...(args) > 0)
    {
        myprintf(std::forward<Args>(args)...);
    }
    else
    {
        myprintf();
    }
}

int main()
{
    //printf("[%s:%d], %s\n", __FILE__, __LINE__, "hello world");
    // LOG("%s, %d\n", "nihao", 666);
    // LOG("nihao\n");
    myPrintf("%s, %d\n", "xie kai lin", 666);
    myprintf("xie kai lin, ", 666);
    return 0;
}